package someTestExcemple.innerClassTest;

public class innerClassTest {
    //内部类是类的5大成分之一(成员变量,成员方法,构造器,内部类,代码块),
    //如果一个类定义在另一个类内部，这个类就是内部类
    //场景 当一个类的内部，包含一个完整的事物，且这个事物没必要单独设计时，就可以把这个事物设计为内部类
    //内部类分为四种:成员/静态/局部/匿名内部类
    public static void main(String[] args) {
        //1.成员内部类的访问
        //应为成员内部类在外部类中，所以需要外部类的实例化才能访问 先要new 外部类的实例
        outerClass.inner inner = new outerClass().new inner("张三");
        inner.innerMethod();
        //静态内部类 它访问外部类的成员 如同静态方法访问外部类的成员
        outerClass.staticInner staticInner = new outerClass.staticInner("李四", 18);
        staticInner.staticInnerMethod();

        //4.匿名内部类
        System.out.println("-----匿名内部类学习------");
        Animal cat  = new Cat();
        cat.cry();
        //如果我只需临时使用一下这个抽象类，那么就可以使用匿名内部类 而不用定义一个子类
       Animal animal = new Animal() {
            @Override
            public void cry() {
                System.out.println("匿名内部类 -- 喵喵--");
            }
        };
       animal.cry();
    }
}
abstract class Animal {
    public abstract void cry();
}
class Cat extends Animal {

    @Override
    public void cry() {
        System.out.println("cat cry---喵喵~~");
    }
}

